子不语Rex

iOS 的键盘「自动改正」功能是如何工作的 | 科普

2007 年,当乔布斯发布首款 iPhone 前,先奚落了一众拥有实体键盘的手机。在他看来,实体键盘不仅侵占了软件和内容的展示空间,并且由于实体按钮的存在,导致软件的操作和功能不得不迁就于键盘,阻碍了创新。

他干掉了实体键盘,然而,虚拟键盘必须面临的问题是:它要如何在输入体验上,与实体键盘持平甚至超越?

乔布斯在演示初代 iPhone 时,还是单指神功,一根手指在小心翼翼地敲击着虚拟键盘。十多年过去了,我们击打虚拟键盘已经如此飞快,这不仅仅归功于我们的肌肉记忆,还要感谢 iOS 键盘的「自动改正」功能。

在今天,你可能已经习惯了键盘的「自动改正」功能,以至于即使你输入了「wi jun tuan xhi fuo fam lr」了,它也能正确地猜测你的意图,是要输入「我今天吃过饭了」。整个过程中,你可能根本不知道自己打错了拼音。不过,如果你试着前往「设置 - 通用 - 键盘」中关闭「自动改正」,输入法就只会如实地按你输入的内容来打字,丝毫不进行任何的猜测与更正。

开启与关闭「自动更正」功能

然而,「自动改正」有时候也会让人又爱又恨,尤其是对于英文输入法来说,它偶尔的失误,可能只会把你的一个错误「改正」成另一个「错误」,甚至有时候会把你原来正确的内容「改正」成错的。例如,给妈妈发短信时,如果你一不小心输成了「Mimmy」,就有可能被改正成「Mummy(木乃伊)」,而不是「Mommy(妈妈)」。国外一度有许多站点专门来分享这些「自动改正」出错时的情况,例如 autocorrectfaildamnyouautocorrect,不过大多都已关闭或停更。

对于这个我们已经习以为常的功能,我们就来看看,它到底是如何工作的?

自动改正的实现依赖于这两项技术

iOS 系统键盘的自动改正功能,主要依赖于以下两项技术。

1. 对输入文本的修正

畅销书《Creative Selection》作者 Ken Kocienda 参与了 iOS 自动改正功能的开发,据他透露,早在 2005 年,他们就已经在内部开发当时代号还是 Purple 的 iPhone 键盘自动改正功能,最早版本的功能实现主要是基于三方面的:哪些词我们输入得最多,词与词之间的关联关系,以及在触屏上最容易输错的字符。

事实上,「自动改正」功能并不是一件新鲜事,早在功能机时代就已经是一项标配了。它的基本原理,就是基于用户输入的内容,比照词典库进行修正,而这个词典库,一方面来自于系统级的标准库,另一方面则来自于用户不断输入过程中的自定义词典库。而这个比照的过程,又可以分为拼写检查词频

  • 拼写检查很容易理解,你的输入如果不是一个标准存在的词汇,在假定你是输错的情况下,一定会有一个最相似的存在。如果输入拼音 fan 时不小心错打成了 fam,很显然,fam 不是一个拼音,而考虑到 m 和 n 键位的靠近,最相近的拼音显然则是 fan,这时候系统就会猜测你实际想输入的 fan。而在英文输入法中,拼写检查结合「输入预测」功能,还可以进一步考虑语法,例如,在输入「I kno」的情况下,系统会补全 know,而换成「He kno」,系统的补全也会变成 knows。

    考虑到语法的拼写检查
  • 词频用来预测用户更可能想输入什么。例如在英文输入法中,同样是键入 china 这几个字母,键盘会尝试自动更正成 China(中国),毕竟 China 是比 china(瓷器)更常用到的词汇。而在中文输入法中,词频则决定了拼音候选词的排序,一般来说,词频超高的选项,会排在越前面。例如,同样是 jueding,「决定」的词频高于「绝顶」。

2. 动态预测你的下一个点击区域

不过,iOS 的自动改正功能还想更进一步:与其等到你犯错再纠正,不如从源头上就减少你犯错(输入错误)的机会。

在功能机时代,手机只有实体键盘的时候,我们按下哪个字母,这件事是确定的。然而,来到触屏时代,虚拟键盘替代了实体按键,这个按下的操作,软件有了更多控制的空间。在 2008 年 6 月 30 日,苹果递交申请了一项编号为 8,232,973 的专利,这个专利的作用是:通过预测用户下一步可能会输入什么字符,来动态地放大该字符的可点击区域。

以专利附加的说明图为例,当用户键入「Go」两个字符时,系统会动态地放大 O、A、D 这三个字符的可点击区域。注意,这里动态放大的是可点击区域,用户肉眼可见的键盘本身是没有变化的。

如果你观察细致的话,你会发现,D 的可点击区域相比 O 和 A 更大,甚至侵占到了上下左右的键位区。这个可点击区域的放大比例,是与词频相关的,如果系统的字典库认为「God」比「Good」等词的输入可能性更大,D 的动态可点击区域也就会越大。而如果用户进一步输入了「Goa」,那么系统会动态地切换被放大的键位区到 D 和 L。

专利附加的说明图

更有意思的是,根据我的试验,如今的 iOS 系统键盘,即使可点击区域被动态放大后用户依然按错了键位,但这个点击区域仍然会作为拼写检查的一项参考因素。什么意思呢?回到文初说的输入「Mimmy」的情境,iOS 给出的自动改正建议究竟是「Mummy(木乃伊)」还是「Mommy(妈妈)」,与你点击 I 键位的位置息息相关。如果你点击 I 键位的靠左侧区域(更靠近 U),则自动改正建议会是「Mummy」;而如果靠右侧(更靠近 O),自动改正建议则会是「Mommy」。

根据点击区域判断

机器学习让自动改正变得更好了吗?

近年来,无论是苹果还是 Google,都在利用机器学习技术,试图让自动改正变得更好用,更少犯错。

你可能会问,为什么自动改正功能需要机器学习?

词典的困境:从基于规则到基于语境

前文提到了,自动改正功能,其实非常依赖于系统的词典库。专注于人工智能解决方案的 Nuance 公司的副总裁 Scott Taylor 也在一次采访中提到,自动改正功能的核心,是解决两个问题:首先,是构建一个正确的词典库;第二,则是建立一个「语言模型(language model)」,让系统可以知道在不同情境下该如何更正用户的输入。

然而,传统模式的词典库是死的,是基于规则的。按照语法规则,自动改正功能可以轻易地区分出「I know」和「He knows」,然而,在面对如下问题时,它就束手无策了:

  • 如果用户的拼写没问题,但表意显然有问题:有人在网上分享过这个一个尴尬的案例。朋友用 iMessage 问她出门了吗?她回复「Checking my vag」。虽然她想回复的是「Checking my bag」,而 vag 在口语中常被用作 vagina(阴道)的简述。这时候,自动改正功能并没有发挥任何作用。

  • 如果用户就是要输入错误的词:Trump 在 Twitter 上曾误输入过一个莫名其妙的词汇 covfefe,引得了不少媒体的关注。当你想和朋友讨论这个事情时,iOS 会试图自动将你的 covfefe 更正为 confederate。不过有意思的是,这个自动改正仅在句首时会触发,如果在句中则不会给出任何结果。这样一来,如果我在前面加上「Have you heard Trump’s typo」,好像倒显得 iOS 理解你想表达的意思了一样。当然实际上并没有,根据我的试验结果,只要 covfefe 不出现在句首,iOS 都不会给出改正建议。

    「covfefe」放在句首和句中不同的效果

是我们对「自动改正」功能寄望过高吗?从上面这几个例子可以看出来,理想中的「自动改正」,不仅仅是改正拼写错误,而是基于语境给出最合适的建议。要做到这一点,显然不可能依靠死板的规则来穷尽所有的可能性,而需要机器学习的介入,让系统能够根据输入的内容、前后文语境,甚至对话人的不同,而自动改正。

显然,我们离这一步还很远,早期开发了 iOS 自动改正功能的 Ken Kocienda 也说:即使如今有人工智能和机器学习技术的加持,核心的问题依然无解 —— 软件不懂得人类表达的细微差别。

机器学习带来的 Bug

我们也许得承认,机器学习对于自动改正的进步是一个需要时间的渐进式过程。然而,在这个过程中,许多人感受最真切的,反而是其带来的 Bug。

在去年年末,iOS 11.1 系统接连曝出了自动改正的数个问题,影响了许多人的正常使用:许多人的键盘会将 it 自动改正为 I.T,is 自动改正为 I.S。最严重的是当想输入 I 时,iOS 会给出一个奇怪的自动改正选项:A,加上一个问号符。

iOS 11.1 的一个输入 bug

据 John Gruber 了解到的情况,产生这个问题的原因,正是因为自动改正功能的机器学习算法出现了问题。而这一问题,直到苹果发布了 iOS 11.1.1 系统更新才算彻底解决。在那之前,苹果不得不给出临时方案,让用户去系统设置中,创建一个 I 的文本替换,引发了一片吐槽。

可见,用户对这类基础功能的期望,并不一定像厂商想得那样,需要这么智能。至少,在变得足够聪明之前,不要犯这么愚蠢的错误。

自动改正不工作的时候:不一定是技术问题

说到犯错,你会发现有的时候 iOS 的自动改正功能甚至完全不工作,特别是对于英文输入法而言。不相信,你试试输入「ficking」或者「mastirbate」,iOS 并不会帮你自动改正到「fucking」或者「masturbate」。(注:这两个词皆为不雅词汇。)

没错,对于这些所谓的「脏话」、「性相关词汇」,iOS 仿佛不认识它们一样,这些词汇完全不存在于输入法的词典库中。显然,这不是一个技术问题,而是人为的价值选择。

2013 年,Daily Beast 发布了一篇名为《The Apple ‘Kill List’: What Your iPhone Doesn’t Want You to Type》的报道,通过测试 25 万个英语词汇,发现有超过 14,000 个英语单词,苹果不会给出自动改正建议。当然,这些单词中绝大多数都是生活中极少用到的词汇,如 nephrotoxin、sempstress 等。

但是,有许多生活中高频使用的词汇也被排除在外,即使在今天,iOS 12 的系统词典库中,依然没有 rape、bullet、arouse、murder 等词汇。不过,这些被苹果删禁的词汇,并不是一尘不变的,在 2013 年被排除在外在 abortion(堕胎),在 iOS 12 中可以被自动改正。

有理由相信,这些刻意的人为选择,都和 Apple 将 emoji 表情中的「枪」替换为「水枪」一样,是因为 Apple 相信这些不单纯是设计或技术问题,而是价值取向的判断。

Apple 将 emoji 表情中的「枪」替换为「水枪」(图:Emojipedia)

不过,有意思的是,在中文输入法中,很多这类的词汇并没有从拼音候选词中被删除。也可能,是因为我曾输入过这些词汇,所以被记录在了我的用户自定义词典上?你也可以试试。

输入不雅词汇不会被自动更正

结语

这就是 iOS 自动改正功能的现状:一方面,苹果在尝试为其加入更多机器学习的能力,使之变得更好用,尽管也闹出了不少问题和 Bug;另一方面,苹果也在小心维护着一份官方禁止的英文词汇列表,仿佛它们不存在一般。

你的「自动改正」功能,有没有曾让你闹出过什么笑话,或者引发过有趣的故事?欢迎在评论中和我们分享。


68

您好,为了保护少数派用户创造的内容、维护良好的社区氛围,我们将从 2019 年 6 月 10 日起实行新的《少数派评论规范》,具体内容您可以通过相关页面了解,感谢您对少数派的理解与支持。(๑•ᴗ•๑)

精选评论 (8)

我的评论

Tp
我记得几年前,一个朋友给我发了一张截图,输入「qi si ni」,候选项第一个是「我爱你」。我还花了不少时间简单解释了一下自动更正的原理,没想到背后还有这么多可以学习的东西,Cool!

(然而我发现自己几年前好像错过了什么东西……

消極男子PM2
学到了几个新单词
JudahXIII
以前了解过关于 iOS 键盘动态调整输入区域的事情,这次看到还有机器学习的应用和价值取向相关的词频调整很受教,谢谢。
SCHOENBERG
只要一段输入里写有一段输入字符被设置了文本替换,那就成了灾难……

比如我为了方便码字,设置 “keji” 替换成 “可积”。这样的话,我在拼音输入法里输入 “keji” 的时候,“可积” 就会排在前面,很方便找到。

然而,当我想打一个 “可见” 的时候……拼音输入法的前几项就是 “可积安” “可积案” 这样的 bulls**t……

挨石
学到了几个新单词…
THINKO
太细致了!特别是「Mimmy」一例的解析。🙇🏻‍♂️
HarveyJanson
中文自动预测有时会强行造出一些很奇葩的结果,例如:打算输入「这篇文章长得不像话」,从「chang de bu xiang hua」开始,预测的结果分别是「唱得不像话」「长的不像话」「唱的」「长的」「吃」「唱得」「才」「出」「次」「从」「成」「车」「常德」「穿」,才能到「长」,感觉像是匹配出最有可能的几个词组结果,给后面的就从「chang」的第一位开始逐个按照词频匹配了。macOS 原生输入法则不会有这个问题。这属于 iOS 输入法自作聪明了。
asnldm
作为双拼用户,没感觉iOS的自动更正在哪里,一不小心就连着打错一堆。如果预测模式如文中所说,我用微软双拼布局,有些声母键可以对应十多个韵母键,不知道iOS如何预测。

在安卓上用过Gboard,Gboard在自动更正的同时还会把打错的字母标成灰色,算是提醒吧,这一点我觉得Gboard比iOS原生键盘做得好。

目录

自动改正的实现依赖于这两项技术

1. 对输入文本的修正

2. 动态预测你的下一个点击区域

机器学习让自动改正变得更好了吗?

词典的困境:从基于规则到基于语境

机器学习带来的 Bug

自动改正不工作的时候:不一定是技术问题

结语